# 加载 Homebrew 配置
source ~/.zprofile

# ========== PATH安全保障 ==========
# 在加载任何环境配置前，确保系统命令可用

# !! 重要注意事项 !!
# 1. PATH环境变量处理的核心规则:
#    - 系统目录(/usr/bin等)必须始终在PATH前端，否则基本命令将不可用
#    - 避免在配置文件中存储完整PATH，以防止路径累积和膨胀
#    - 不同环境模块的PATH修改应该是增量的，不应覆盖整个PATH
#    - 任何脚本修改PATH后，应该进行去重处理
#
# 2. 已知问题:
#    - .n_env文件曾存储完整PATH，导致每次加载都覆盖系统路径
#    - load_node_env()函数直接应用了.n_env中的PATH，造成系统命令不可用
#    - 多次运行n_postinstall_hook()导致PATH不断累积重复项
#
# 3. 预防措施:
#    - 确保系统路径始终位于PATH前端
#    - 提供deduplicate_path()函数去除重复路径
#    - 各环境配置文件中不再存储完整PATH
#    - 每次修改PATH时注意保留系统路径的优先级

# 保存原始PATH
export ORIGINAL_PATH="$PATH"

# 确保基本系统路径优先存在
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"

# PATH去重函数
function deduplicate_path() {
  # !! 重要 !! 
  # 此函数用于去除PATH中的重复路径
  # 任何修改PATH的代码都应该调用此函数
  # 用法: export PATH=$(deduplicate_path "$PATH")
  
  local path_to_clean=$1
  local new_path=""
  local seen_paths=()
  
  # 处理路径
  local IFS=":"
  for path_item in $path_to_clean; do
    # 跳过空路径
    if [ -z "$path_item" ]; then
      continue
    fi
    
    # 如果这个路径还没见过，就添加到新PATH中
    if [[ ! " ${seen_paths[@]} " =~ " ${path_item} " ]]; then
      seen_paths+=("$path_item")
      if [ -z "$new_path" ]; then
        new_path="$path_item"
      else
        new_path="$new_path:$path_item"
      fi
    fi
  done
  
  echo "$new_path"
}

# 应用PATH去重
export PATH=$(deduplicate_path "$PATH")

# 确保路径中包含基本系统命令
if ! command -v ls >/dev/null 2>&1 || ! command -v cat >/dev/null 2>&1; then
  echo "警告: 基本系统命令不可用，正在修复PATH..."
  export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:$PATH"
  export PATH=$(deduplicate_path "$PATH")
fi

# ========== 配置全局变量 ==========
# 定义配置目录的根路径
export CONFIG_HOME="${HOME}/.mac_sync"

# ========== 模块化环境配置 ==========
# 首先加载日志工具
source "${CONFIG_HOME}/log_utils.zsh"

# 根据需要加载不同的开发环境配置

# Node.js 环境配置
source "${CONFIG_HOME}/node_env.zsh"

# Java 环境配置
source "${CONFIG_HOME}/java_env.zsh"

# Python 环境配置
source "${CONFIG_HOME}/python_env.zsh"

# 加载数据库环境配置
source "${CONFIG_HOME}/db_env.zsh"

# 加载Docker环境配置
source "${CONFIG_HOME}/docker_env.zsh"

# 加载Android环境配置
source "${CONFIG_HOME}/android_env.zsh"

# 其他环境配置示例 (取消注释以启用)
# source "${CONFIG_HOME}/go_env.zsh"
# source "${CONFIG_HOME}/ruby_env.zsh"
# source "${CONFIG_HOME}/rust_env.zsh"
# source "${CONFIG_HOME}/php_env.zsh"
# source "${CONFIG_HOME}/dotnet_env.zsh"

# ========== 通用配置 ==========

# zsh plugins
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
export ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR=/usr/local/share/zsh-syntax-highlighting/highlighters

# 其他环境配置
export PROFILE_HOME="$HOME"

#启动ssh
# sudo systemsetup -setremotelogin on

# ========== 通用别名 ==========

# 文件操作
alias ll="ls -la"

# 应用快捷方式
alias ws="open -a webstorm"
alias vs="open -a Visual\ Studio\ Code"

# MongoDB
export PATH=${PATH}:/usr/local/mongodb/bin

# IDE paths
export PATH=${PATH}:/Applications/WebStorm.app/Contents/MacOS

# 路径信息显示函数
function paths() {
  log_all_paths
}

# 路径信息查看命令
alias paths="paths"

# ========== PATH 安全保障和优化 ==========

# 由于我们已经在文件开头进行了基本PATH修复，
# 这里只进行去重和完整性检查

# 保存原始PATH备份
original_path="$PATH"

# 确保PATH包含必要的系统目录
system_essential_paths="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"

# 去除PATH中的重复路径
function mac_env_deduplicate_path() {
  local path_to_clean=$1
  local new_path=""
  local seen_paths=()
  
  # 处理使用空格分隔的错误路径
  path_to_clean=$(/bin/echo "$path_to_clean" | /usr/bin/tr ' ' ':')
  
  # 按冒号分割PATH并去重
  local IFS=":"
  for path_item in $path_to_clean; do
    # 跳过空路径
    if [ -z "$path_item" ]; then
      continue
    fi
    
    # 如果这个路径还没见过，就添加到新PATH中
    if [[ ! " ${seen_paths[@]} " =~ " ${path_item} " ]]; then
      seen_paths+=("$path_item")
      if [ -z "$new_path" ]; then
        new_path="$path_item"
      else
        new_path="$new_path:$path_item"
      fi
    fi
  done
  
  /bin/echo "$new_path"
}

# 统计去重前的路径数量
before_count=$(/bin/echo $PATH | /usr/bin/tr ':' '\n' | /usr/bin/wc -l | /usr/bin/tr -d ' ')

# 确保系统路径优先
for essential_path in $(/bin/echo $system_essential_paths | /usr/bin/tr ':' ' ' 2>/dev/null); do
  if [[ ! ":$PATH:" == *":$essential_path:"* ]]; then
    PATH="$essential_path:$PATH"
    echo "添加系统目录到PATH前端: $essential_path"
  fi
done

# 最终去重
export PATH=$(deduplicate_path "$PATH")

# 统计去重后的路径数量
after_count=$(/bin/echo $PATH | /usr/bin/tr ':' '\n' | /usr/bin/wc -l | /usr/bin/tr -d ' ')

# 显示去重效果
if [ $before_count -ne $after_count ]; then
  echo "✅ PATH变量已最终优化: 从 $before_count 个路径减少到 $after_count 个路径"
else
  echo "ℹ️ PATH变量已最终检查: $after_count 个路径，无重复"
fi

# 最终检查所有关键系统命令
critical_commands=("ls" "cat" "grep" "head" "tail" "mkdir" "dirname" "tr" "wc" "sort" "find" "sed" "awk")
missing_commands=()

for cmd in "${critical_commands[@]}"; do
  if ! command -v $cmd >/dev/null 2>&1; then
    missing_commands+=($cmd)
  fi
done

if [ ${#missing_commands[@]} -eq 0 ]; then
  echo "✅ 所有系统命令可用，环境配置完整"
else
  echo "⚠️ 警告: 以下命令仍不可用，可能需要手动检查: ${missing_commands[*]}"
  # 输出当前PATH以辅助诊断
  echo "当前PATH:"
  echo "$PATH" | tr ':' '\n'
fi

# 注意: 不要清理deduplicate_path函数，它需要在全局可用
unset -f mac_env_deduplicate_path
